package com.sparkseries.service;

import com.sparkseries.domain.vo.SysRoleVO;
import com.sparkseries.domain.vo.SysUserVO;
import com.sparkseries.dto.SysRoleDTO;
import com.sparkseries.common.util.domain.Result;

import java.util.List;

/**
 * 角色管理
 */
public interface SysRoleService {
    /**
     * 创建角色
     * @param roleDTO 角色传输类
     * @return 默认响应类
     */
    Result<?> createRole(SysRoleDTO roleDTO);

    /**
     * 绑定用户角色
     * @param userIds 用户ID集合
     * @param roleId 角色ID
     * @return 默认响应类
     */
    Result<?> bindUserWithRole(List<Long> userIds, Long roleId);

    /**
     * 删除角色
     * @param roleId 角色ID
     * @return 默认响应类
     */
    Result<?> deleteRole(Long roleId);

    /**
     * 删除用户角色绑定
     * @param userIds 用户ID集合
     * @param roleId 角色ID
     * @return 默认响应类
     */
    Result<?> deleteUserWithRole(List<Long> userIds, Long roleId);

    /**
     * 修改角色信息
     * @param roleDTO 角色传输类
     * @return 默认响应类
     */
    Result<?> updateRole(SysRoleDTO roleDTO);

    /**
     * 修改角色状态
     * @param roleId 角色ID
     * @param status 是否启用（0-禁用，1-启用）
     * @return 默认响应类
     */
    Result<?> updateRoleStatus(Long roleId, Integer status);

    /**
     * 获取角色列表
     * @param roleDTO 角色传输类
     * @return 角色响应类集合
     */
    Result<List<SysRoleVO>> listRole(SysRoleDTO roleDTO);

    /**
     * 获取角色信息
     * @param roleId 角色ID
     * @return 角色响应类
     */
    Result<SysRoleVO> getRoleInfo(Long roleId);

    /**
     * 获取该角色下的用户
     * @param roleId 角色ID
     * @return 用户响应类集合
     */
    Result<List<SysUserVO>> listUserWithRole(Long roleId);
}
